home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / misc / gms_dev.lha / GMSDev / Source / Asm / Blitter / PixelTrail1.s < prev    next >
Encoding:
Text File  |  1998-05-07  |  4.6 KB  |  198 lines

  1. ;-------T-------T------------------------T----------------------------------;
  2. ;This demo demonstrates the usefulness of LISTs, by drawing a trail of
  3. ;pixels attached to the mouse.  In the case of pixels there are special
  4. ;routines for drawing with lists, so the drawing is very fast.
  5. ;
  6. ;Press LMB to exit.
  7.  
  8.     INCDIR    "GMSDev:Includes/"
  9.     INCLUDE    "dpkernel/dpkernel.i"
  10.  
  11.     SECTION    "Demo",CODE
  12.  
  13. ;===========================================================================;
  14. ;                             INITIALISE DEMO
  15. ;===========================================================================;
  16.  
  17.     STARTDPK
  18.  
  19. Start:    MOVEM.L    A0-A6/D1-D7,-(SP)
  20.     move.l    DPKBase(pc),a6
  21.     lea    ScreenTags(pc),a0
  22.     sub.l    a1,a1
  23.     CALL    Init
  24.     tst.l    d0
  25.     beq.s    .Exit
  26.  
  27.     moveq    #ID_JOYDATA,d0    ;Get joydata structure.
  28.     CALL    Get
  29.     move.l    d0,JoyData
  30.     beq.s    .Exit
  31.     move.l    d0,a0    ;Initialise the joydata structure.
  32.     sub.l    a1,a1
  33.     CALL    Init
  34.     tst.l    d0
  35.     beq.s    .Exit
  36.  
  37.     move.l    Screen(pc),a0
  38.     CALL    Display
  39.  
  40.     bsr.s    Main
  41.  
  42. .Exit    move.l    DPKBase(pc),a6
  43.     move.l    JoyData(pc),a0
  44.     CALL    Free
  45.     move.l    Screen(pc),a0
  46.     CALL    Free
  47.     MOVEM.L    (SP)+,A0-A6/D1-D7
  48.     moveq    #ERR_OK,d0
  49.     rts
  50.  
  51. ;===========================================================================;
  52. ;                                MAIN LOOP
  53. ;===========================================================================;
  54.  
  55. Main:    lea    MList(pc),a2    ;a2 = Pointer to pixel list.
  56. .loop    move.l    DPKBase(pc),a6
  57.     move.l    Screen(pc),a1
  58.     move.l    GS_Bitmap(a1),a0
  59.     move.l    GS_MemPtr2(a1),BMP_Data(a0)
  60.     CALL    Clear
  61.  
  62.     move.l    Screen(pc),a0
  63.     move.l    a2,a3    ;Drop the pixels here.
  64.     moveq    #31-1,d7
  65. .drop    addq.w    #1,2(a3)    ;a3 = YCoord+1
  66.     subq.l    #1,4(a3)    ;a3 = (Colour)-1
  67.     bge.s    .colok
  68.     clr.l    4(a3)
  69. .colok    addq.w    #8,a3
  70.     dbra    d7,.drop
  71.  
  72.     move.l    DPKBase(pc),a6
  73.     move.l    JoyData(pc),a0
  74.     CALL    Query
  75.  
  76.     move.l    JoyData(pc),a0
  77.     move.l    JD_Buttons(a0),d0
  78.     btst    #JB_LMB,d0
  79.     bne    .done
  80.  
  81.     lea    MouseX(pc),a5
  82.     move.w    JD_YChange(a0),d0
  83.     add.w    d0,2(a5)    ;d1 = (MouseY)+ChangeY
  84.  
  85.     move.w    JD_XChange(a0),d0
  86.     add.w    (a5),d0
  87.  
  88.     move.l    Screen(pc),a0
  89. .ChkRX    cmp.w    GS_Width(a0),d0
  90.     blt.s    .ChkLX
  91.     clr.w    (a5)
  92.     bra.s    .Calculate
  93. .ChkLX    tst.w    d0
  94.     bgt.s    .okX
  95.     move.w    GS_Width(a0),(a5)
  96.     bra.s    .Calculate
  97. .okX    move.w    d0,(a5)
  98.  
  99. .Calculate
  100.     move.l    (a5),-(sp)
  101.     moveq    #2,d1
  102.     CALL    FastRandom
  103.     subq.w    #1,d0
  104.     add.w    d0,(a5)
  105.  
  106.     moveq    #2,d1
  107.     CALL    FastRandom
  108.     subq.w    #1,d0
  109.     add.w    d0,2(a5)
  110.  
  111.     move.l    a2,a3
  112.     moveq    #31-1,d7
  113. .tloop    move.l    8(a3),(a3)
  114.     move.l    12(a3),4(a3)
  115.     addq.w    #8,a3
  116.     dbra    d7,.tloop
  117.  
  118.     move.l    BLTBase(pc),a6
  119.     move.l    Screen(pc),a0
  120.     move.l    GS_Bitmap(a0),a0
  121.     lea    PixelList(pc),a1    ;a1 = Pixel list.
  122.     CALL    bltDrawPixelList    ;>> = Draw pixels with clipping.
  123.  
  124.     move.l    (sp)+,(a5)
  125.  
  126.     move.l    SCRBase(pc),a6
  127.     CALL    scrWaitAVBL
  128.     move.l    Screen(pc),a0
  129.     CALL    scrSwapBuffers
  130.     bra    .loop
  131.  
  132. .done    rts
  133.  
  134. ;===========================================================================;
  135. ;                                  DATA
  136. ;===========================================================================;
  137.  
  138. JoyData:    dc.l  0
  139.  
  140. ScreenTags:    dc.l  TAGS_SCREEN
  141. Screen:        dc.l  0
  142.         dc.l  GSA_Attrib,SCR_DBLBUFFER
  143.         dc.l    GSA_BitmapTags,0
  144.         dc.l    BMA_Palette,.palette
  145.         dc.l    TAGEND,0
  146.         dc.l  TAGEND
  147.  
  148. .palette    dc.l  PALETTE_ARRAY,32
  149.         dc.l  $000000,$101010,$171717,$202020,$272727,$303030,$373737,$404040
  150.         dc.l  $474747,$505050,$575757,$606060,$676767,$707070,$777777,$808080
  151.         dc.l  $878787,$909090,$979797,$a0a0a0,$a7a7a7,$b0b0b0,$b7b7b7,$c0c0c0
  152.         dc.l  $c7c7c7,$d0d0d0,$d7d7d7,$e0e0e0,$e0e0e0,$f0f0f0,$f7f7f7,$ffffff
  153.  
  154. PixelList:    dc.w   32,PXL_SIZEOF    ;Amount of entries, EntrySize.
  155.         dc.l   MList    ;Pointer to pixel list array.
  156. MList:        PIXEL  160,128,00    ;First pixel to draw (at back)
  157.         PIXEL  160,128,00    ;X/Y/Colour
  158.         PIXEL  160,128,00    ;..
  159.         PIXEL  160,128,00    ;..
  160.         PIXEL  160,128,00    ;..
  161.         PIXEL  160,128,00    ;..
  162.         PIXEL  160,128,00    ;..
  163.         PIXEL  160,128,00    ;..
  164.         PIXEL  160,128,00    ;..
  165.         PIXEL  160,128,00    ;..
  166.         PIXEL  160,128,00    ;..
  167.         PIXEL  160,128,00    ;..
  168.         PIXEL  160,128,00    ;..
  169.         PIXEL  160,128,00    ;..
  170.         PIXEL  160,128,00    ;..
  171.         PIXEL  160,128,00    ;..
  172.         PIXEL  160,128,00    ;..
  173.         PIXEL  160,128,00    ;..
  174.         PIXEL  160,128,00    ;..
  175.         PIXEL  160,128,00    ;..
  176.         PIXEL  160,128,00    ;..
  177.         PIXEL  160,128,00    ;..
  178.         PIXEL  160,128,00    ;..
  179.         PIXEL  160,128,00    ;..
  180.         PIXEL  160,128,00    ;..
  181.         PIXEL  160,128,00    ;..
  182.         PIXEL  160,128,00    ;..
  183.         PIXEL  160,128,00    ;..
  184.         PIXEL  160,128,00    ;..
  185.         PIXEL  160,128,00    ;..
  186.         PIXEL  160,128,00    ;..
  187. MouseX:        PIXEL  160,128,31    ;Last pixel to draw (in front)
  188.  
  189. ;===========================================================================;
  190.  
  191. ProgName:    dc.b  "Pixel Trail I",0
  192. ProgAuthor:    dc.b  "Paul Manias",0
  193. ProgDate:    dc.b  "January 1998",0
  194. ProgCopyright:    dc.b  "DreamWorld Productions (c) 1996-1998.  Freely distributable.",0
  195. ProgShort:    dc.b  "Pixel trail demonstration.",0
  196.         even
  197.  
  198.